
Date.prototype.msstamp = function() { return new Date(this).valueOf(); }
Date.prototype.sstamp = function() { return parseInt(new Date(this).valueOf() / 1000); }
Date.prototype.stamp = function(days) { return new Date(this).valueOf(); }
function fmtDate(obj) {
	var date = new Date(obj);
	var y = 1900 + date.getYear();
	var m = "0" + (date.getMonth() + 1);
	var d = "0" + date.getDate();
	return y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length);
}

function fmtTime(obj) {
	var date = new Date(obj);
	var y = 1900 + date.getYear();
	var m = "0" + (date.getMonth() + 1);
	var d = "0" + date.getDate();
	var h = "0" + date.getHours(); // 小时
	var mi = "0" + date.getMinutes(); // 分
	var s = "0" + date.getSeconds(); // 秒

	return y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mi.substring(mi.length - 2, mi.length) + ":" + s.substring(s.length - 2, s.length);
}

Date.prototype.Format = function(fmt) { // author: meizz
	var o = {
		"M+": this.getMonth() + 1, // 月份
		"d+": this.getDate(), // 日
		"H+": this.getHours(), // 小时
		"m+": this.getMinutes(), // 分
		"s+": this.getSeconds(), // 秒
		"q+": Math.floor((this.getMonth() + 3) / 3), // 季度
		"S": this.getMilliseconds() // 毫秒
	};
	if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.jQuery1, (this.getFullYear() + "").substr(4 - RegExp.jQuery1.length));
	for (var k in o)
		if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.jQuery1, (RegExp.jQuery1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
}
Date.prototype.addDays = function(days) {
	var date = new Date(this);
	date.setDate(date.getDate() + days);
	return date;
}
Date.prototype.addMonths = function(mons) {
	var date = new Date(this);
	date.setMonth(date.getMonth() + mons);
	return date;
}


Date.prototype.addYears = function(years) {
	var date = new Date(this);
	//console.log (date.getYear(),date.getFullYear() )
	date.setFullYear(date.getFullYear() + years);
	return date;
}
Date.prototype.Format = function(fmt) {
	if (fmt == null || fmt == '')
		fmt = 'yyyy-MM-dd hh:mm:ss'
	var o = {
		"M+": this.getMonth() + 1, //月 
		"d+": this.getDate(), //日 
		"h+": this.getHours(), //时 
		"m+": this.getMinutes(), //分 
		"s+": this.getSeconds(), //秒 
		"q+": Math.floor((this.getMonth() + 3) / 3), //季度
		"S": this.getMilliseconds() //毫秒 
	};
	if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	for (var k in o)
		if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
}



//--------------------------------------------------- 
// 日期格式化
// 格式 YYYY/yyyy/YY/yy 表示年份 
// MM/M 月份 
// W/w 星期 
// dd/DD/d/D 日期 
// hh/HH/h/H 时间 
// mm/m 分钟 
// ss/SS/s/S 秒 
//--------------------------------------------------- 
Date.prototype.format2 = function(str) {
	/**
	 *  支持周格式
	 */
	if (str == null || str == '')
		str = 'yyyy-MM-dd hh:mm:ss'
	var Week = ['日', '一', '二', '三', '四', '五', '六'];

	str = str.replace(/yyyy|YYYY/, this.getFullYear());
	str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100));
	let mon = this.getMonth() + 1
	str = str.replace(/MM/, mon > 9 ? mon.toString() : '0' + mon);
	str = str.replace(/M/g, mon);

	str = str.replace(/w|W/g, Week[this.getDay()]);

	str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
	str = str.replace(/d|D/g, this.getDate());

	str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
	str = str.replace(/h|H/g, this.getHours());
	str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
	str = str.replace(/m/g, this.getMinutes());

	str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
	str = str.replace(/s|S/g, this.getSeconds());

	return str;
}

//--------------------------------------------------- 
// 判断闰年 
//--------------------------------------------------- 
Date.prototype.isLeapYear = function() {
	return (0 == this.getYear() % 4 && ((this.getYear() % 100 != 0) || (this.getYear() % 400 == 0)));
}




//+--------------------------------------------------- 
//| 日期计算 
//+--------------------------------------------------- 
Date.prototype.addDate = function(strInterval, Number) {
	var dtTmp = this;
	switch (strInterval) {
		case 's': return new Date(Date.parse(dtTmp) + (1000 * Number));
		case 'n': return new Date(Date.parse(dtTmp) + (60000 * Number));
		case 'h': return new Date(Date.parse(dtTmp) + (3600000 * Number));
		case 'd': return new Date(Date.parse(dtTmp) + (86400000 * Number));
		case 'w': return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
		case 'q': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number * 3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
		case 'm': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
		case 'y': return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
	}
}

//+--------------------------------------------------- 
//| 比较日期差 dtEnd 格式为日期型或者有效日期格式字符串 
//+--------------------------------------------------- 
Date.prototype.diff = function(dtEnd, strInterval) {
	var dtStart = this;
	if (typeof dtEnd == 'string')//如果是字符串转换为日期型 
	{
		dtEnd = StringToDate(dtEnd);
	}
	switch (strInterval) {
		case 's': return parseInt((dtEnd - dtStart) / 1000);
		case 'n': return parseInt((dtEnd - dtStart) / 60000);
		case 'h': return parseInt((dtEnd - dtStart) / 3600000);
		case 'd': return parseInt((dtEnd - dtStart) / 86400000);
		case 'w': return parseInt((dtEnd - dtStart) / (86400000 * 7));
		case 'm': return (dtEnd.getMonth() + 1) + ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12) - (dtStart.getMonth() + 1);
		case 'y': return dtEnd.getFullYear() - dtStart.getFullYear();
	}
}

//+--------------------------------------------------- 
//| 日期输出字符串，重载了系统的toString方法 
//+--------------------------------------------------- 
Date.prototype.toString = function(showWeek) {
	var myDate = this;
	var str = myDate.toLocaleDateString();
	if (showWeek) {
		var Week = ['日', '一', '二', '三', '四', '五', '六'];
		str += ' 星期' + Week[myDate.getDay()];
	}
	return str;
}

/**
 * 把日期分割成数组 
 * 注意月份是从0开始
 */
Date.prototype.toArray = function() {
	var myDate = this;
	var myArray = Array();
	myArray[0] = myDate.getFullYear();
	myArray[1] = myDate.getMonth();
	myArray[2] = myDate.getDate();
	myArray[3] = myDate.getHours();
	myArray[4] = myDate.getMinutes();
	myArray[5] = myDate.getSeconds();
	return myArray;
}

//+--------------------------------------------------- 
//| 取得日期数据信息 
//| 参数 interval 表示数据类型 
//| y 年 m月 d日 w星期 ww周 h时 n分 s秒 
//+--------------------------------------------------- 
Date.prototype.DatePart = function(interval) {
	var myDate = this;
	var partStr = '';
	var Week = ['日', '一', '二', '三', '四', '五', '六'];
	switch (interval) {
		case 'y': partStr = myDate.getFullYear(); break;
		case 'm': partStr = myDate.getMonth() + 1; break;
		case 'd': partStr = myDate.getDate(); break;
		case 'w': partStr = Week[myDate.getDay()]; break;
		case 'ww': partStr = myDate.WeekNumOfYear(); break;
		case 'h': partStr = myDate.getHours(); break;
		case 'n': partStr = myDate.getMinutes(); break;
		case 's': partStr = myDate.getSeconds(); break;
	}
	return partStr;
}

//+--------------------------------------------------- 
//| 取得当前日期所在月的最大天数 
//+--------------------------------------------------- 
Date.prototype.MaxDayOfMon = function() {
	var ary = this.toArray();
	var date1 = new Date(ary[0], ary[1], 1);
	var date2 = date1.addDate('m', 1);
	var result = date1.diff('d', date2);
	return result;
}
/**
 * 当前月的第一天
 */
Date.prototype.FirstDayOfDate = function() {
	var ary = this.toArray();
	var date1 = new Date(ary[0], ary[1], 1);
	return date1;
}
/**
 * 当前月的最后一天
 * 
 */
Date.prototype.LastDayOfDate = function() {
	var ary = this.toArray();
	var date1 = new Date(ary[0], ary[1], 1);
	var date2 = date1.addDate('m', 1).addDate('d', -1)
	return date2;
}
//+--------------------------------------------------- 
//| 日期合法性验证 
//| 格式为：YYYY-MM-DD或YYYY/MM/DD 
//+--------------------------------------------------- 
export function isValid(DateStr) {
	var sDate = DateStr.replace(/(^\s+|\s+$)/g, ''); //去两边空格; 
	if (sDate == '') return true;
	//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为'' 
	//数据库中，合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式 
	var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g, '');
	if (s == '') //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D 
	{
		var t = new Date(sDate.replace(/\-/g, '/'));
		var ar = sDate.split(/[-/:]/);
		if (ar[0] != t.getYear() || ar[1] != t.getMonth() + 1 || ar[2] != t.getDate()) {
			//alert('错误的日期格式！格式为：YYYY-MM-DD或YYYY/MM/DD。注意闰年。'); 
			return false;
		}
	}
	else {
		//alert('错误的日期格式！格式为：YYYY-MM-DD或YYYY/MM/DD。注意闰年。'); 
		return false;
	}
	return true;
}

//+--------------------------------------------------- 
//| 日期时间检查 
//| 格式为：YYYY-MM-DD HH:MM:SS 
//+--------------------------------------------------- 
export function CheckDate(str) {
	var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;
	var r = str.match(reg);
	if (r == null) return false;
	r[2] = r[2] - 1;
	var d = new Date(r[1], r[2], r[3], r[4], r[5], r[6]);
	if (d.getFullYear() != r[1]) return false;
	if (d.getMonth() != r[2]) return false;
	if (d.getDate() != r[3]) return false;
	if (d.getHours() != r[4]) return false;
	if (d.getMinutes() != r[5]) return false;
	if (d.getSeconds() != r[6]) return false;
	return true;
}


/**
 * 直接计算 201709 + 4= 201801
 * @param {*} monnum 
 * @param {*} num 
 */
export function addmonnum(monnum, num) {
	var ym = new Number(monnum)
	var y = parseInt(ym / 100); //2017
	var m = ym % 100; //09
	var cnt = parseInt(num / 12);
	var mnt = num % 12;
	y = y + cnt;
	if (mnt < 0) {
		y = y - 1;
		m = m + (12 + mnt);
	} else {
		m = m + mnt;
	}
	if (m > 12) {
		y = y + 1;
		m -= 12;
	}
	return (y * 100 + m).toString();
}


//+--------------------------------------------------- 
//| 字符串转成日期类型 
//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd 
//+--------------------------------------------------- 
export function StringToDate(DateStr) {
	var converted = Date.parse(DateStr);
	var myDate = new Date(converted);
	if (isNaN(myDate)) {
		return new Date(0)
	}
	return myDate;
}

export function f出生年月_年龄(出生年月) {
	let str = 出生年月 + "-01";
	let d1 = new Date(str);
	let d2 = new Date();
	return d2.getFullYear() - d1.getFullYear();
}
export function f年龄_出生年月(age) {
	let i = 0 - (typeof (age) == 'string' ? parseInt(age) : age);
	let d1 = new Date();
	return d1.addYears(i).Format('yyyy-MM');
}

export function getNow(str) {
	if (str == null)
		return new Date().Format();
	else
		return StringToDate(str).format2();
}
export function before(time1, time2) {
	var d1 = new Date(time1).getTime();
	var d2 = new Date(time2).getTime();
	if (d1 < d2) return true;
	else return false;
}


/**
 * 转成日期数值格式
 */
Date.prototype.toDateNum = function() {
	var D = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'];
	var d = new Date(this);

	return [d.getFullYear(),
	D[d.getMonth() + 1] || d.getMonth() + 1,
	D[d.getDate()] || d.getDate()
	].join('')
};
/**
 * 转成时间数值格式
 */
Date.prototype.toTimeNum = function() {
	var D = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'];
	var d = new Date(this);
	return [D[d.getHours()] || d.getHours(),
	D[d.getMinutes()] || d.getMinutes(),
	D[d.getSeconds()] || d.getSeconds(),
	d.getMilliseconds().toString().padLeft(4)
	].join('');
};


/**
 * 功能:实现VBScript的DateAdd功能.
 *   参数:interval,字符串表达式，表示要添加的时间间隔.
 *   参数:number,数值表达式，表示要添加的时间间隔的个数.
 *   返回:新的时间对象.
 * @param {Object} interval 类型 年y 季度q 月M 周w 天 d 小时h 分钟 m 秒 s 默认：天
 * @param {Object} number 加数
 */
Date.prototype.add = function(interval, number) {
	var d = this;
	switch (interval) {
		case "y":
			d.setFullYear(d.getFullYear() + number);
			return d;
		case "q":
			d.setMonth(d.getMonth() + number * 3);
			return d;
		case "M":
			d.setMonth(d.getMonth() + number);
			return d;
		case "w":
			d.setDate(d.getDate() + number * 7);
			return d;
		case "h":
			d.setHours(d.getHours() + number);
			return d;
		case "m":
			d.setMinutes(d.getMinutes() + number);
			return d;
		case "s":
			d.setSeconds(d.getSeconds() + number);
			return d;
		default:
			d.setDate(d.getDate() + number);
			return d;
	}
};

//export var now = new Date();

//时间戳转日期

// console.log(StringToDate('2020-12-2 9:2:3 2').format2())
//console.log(new Date().sstamp())
//console.log(new Date().msstamp())
// console.log(now.addDays(2))
// console.log(now.addDays(2).Format())
// console.log(now.addDays(1).format2('yyyy-MM-dd 周w'))
// console.log(now.addMonths(-1).toArray());
// console.log(now.addDate('m', -1).format2())
// console.log(now.diff('d', '2020-12-2'))
// console.log(now.DatePart('m'))
// console.log(now.MaxDayOfMon())
// console.log(now.FirstDayOfDate().toString())
// console.log(now.LastDayOfDate().toString())
// console.log(now.toString())

